const request = wx.request;
const config = require('../config');
const analytics = require('./analytics');

// 获取基础URL和算法服务URL
const baseURL = config.development.baseURL;
const RECOMMENDATION_BASE_URL = config.development.algorithmServiceURL; // 从配置中获取算法服务URL

/**
 * 与推荐算法服务的交互工具
 */
const recommendation = {
  /**
   * 获取推荐系统状态
   * @returns {Promise} 包含推荐系统状态的Promise
   */
  getRecommendationStatus: function() {
    return new Promise((resolve, reject) => {
      request({
        url: `${RECOMMENDATION_BASE_URL}/api/recommendation/status`,
        method: 'GET',
        success: res => {
          if (res.statusCode === 200 && res.data.code === 200) {
            resolve(res.data.data);
          } else {
            reject(new Error(res.data.message || '获取推荐系统状态失败'));
          }
        },
        fail: err => {
          console.error('获取推荐系统状态请求失败:', err);
          reject(err);
        }
      });
    });
  },

  /**
   * 获取用户的推荐课程
   * @param {number} userId 用户ID
   * @param {number} count 推荐数量
   * @returns {Promise} 包含推荐课程的Promise
   */
  getRecommendedCourses: function(userId, count = 10) {
    return new Promise((resolve, reject) => {
      if (!userId) {
        reject(new Error('用户ID不能为空'));
        return;
      }

      // 记录获取推荐课程的点击事件
      analytics.clickEvent('recommend_courses', 'home');

      request({
        url: `${RECOMMENDATION_BASE_URL}/api/recommendation/course`,
        method: 'GET',
        data: {
          user_id: userId,
          count: count
        },
        success: res => {
          if (res.statusCode === 200 && res.data.code === 200) {
            resolve(res.data.data);
          } else {
            reject(new Error(res.data.message || '获取推荐课程失败'));
          }
        },
        fail: err => {
          console.error('获取推荐课程请求失败:', err);
          reject(err);
        }
      });
    });
  },

  /**
   * 获取与指定课程相似的课程
   * @param {number} courseId 课程ID
   * @param {number} count 推荐数量
   * @returns {Promise} 包含相似课程的Promise
   */
  getSimilarCourses: function(courseId, count = 5) {
    return new Promise((resolve, reject) => {
      if (!courseId) {
        reject(new Error('课程ID不能为空'));
        return;
      }

      // 记录获取相似课程的事件
      analytics.track('click', null, {
        element_id: 'similar_courses',
        course_id: courseId
      });

      request({
        url: `${RECOMMENDATION_BASE_URL}/api/recommendation/similar_courses`,
        method: 'GET',
        data: {
          course_id: courseId,
          count: count
        },
        success: res => {
          if (res.statusCode === 200 && res.data.code === 200) {
            resolve(res.data.data);
          } else {
            reject(new Error(res.data.message || '获取相似课程失败'));
          }
        },
        fail: err => {
          console.error('获取相似课程请求失败:', err);
          reject(err);
        }
      });
    });
  }
};

module.exports = recommendation; 